/**
 @file message.h
 @brief Funciones del servicio de intercambio de mensajes.
 @date   05/11/2012
 @version v.0.9
 @author Julian Ovalle
         julianovalle@ula.ve
*/

#ifndef MESSAGE_H_
#define MESSAGE_H_

#include "message_def.h"
#include "packet_def.h"
#include "app_layer_def.h"
#include <errno.h>

#define MSG_DEBUG

/*!
   @brief Envía un mensaje en broadcast/unicast según el valor contenido en su campo nodeId.
   @param *msg Apuntador al mensaje a enviar
   @return 0 en caso de exito. -1 en caso de error
 */
int msgOutput(struct msg_t *msg);

/*!
   @brief Recibe la data contenida en una trama de capa aplicación entrante para generar un mensaje y enviarlo a la cola correspondiente @see wpan_node_t
   @param msqid Identificador de la cola de entrada para el nodo origen.
   @param *identifier Apuntador al mensaje a enviar
   @param *data Apuntador la data recibida
   @param size Cantidad de bytes recibidos
   @return 0 en caso de exito. -1 en caso de error
 */
int msgInput(int msqid, char *identifier, uint8_t *data, uint8_t size);

/*!
   @brief Función utilizada en el envío en unicast/broadcast, convierte el mensaje en una trama de data XBee y lo entrega a las capas inferiores
   @param *msg Apuntador al mensaje a enviar
   @param addr16 Dirección de destino de 16 bits
   @param addr64 Dirección de destino de 64 bits
   @return 0 en caso de exito. -1 en caso de error
 */
int sendPacket(struct msg_t *msg, uint16_t addr16, uint64_t addr64);

/*!
   @brief Envía un mensaje en multicast a la lista de destinatarios dada.
   @param *msg Apuntador al mensaje a enviar
   @param *list Apuntador a la lista de destinatarios
   @return 0 en caso de exito. -1 en caso de error
 */
int msgMulticast(struct msg_t *msg, dest_list_t *list);

void messageInit();

#endif /* MESSAGE_H_ */
